package mediator_pattern;

/**
 * @author 申书航
 * @version 1.0
 *
 * 页面类，负责用户界面的用户交互和验证。
 */
public class Page implements Mediator{

    private final TextBox username;

    private final TextBox password1;

    private final TextBox password2;

    private final Label lblUsername;

    private final Label lblPassword1;

    private final Label lblPassword2;

    private final Button reg;

    /**
     * 构造函数，初始化界面组件。
     */
    public Page() {
        username = new TextBox(this, "用户名");
        password1 = new TextBox(this, "密码");
        password2 = new TextBox(this, "确认密码");
        lblUsername = new Label(this, "用户名验证提示");
        lblPassword1 = new Label(this, "密码验证提示");
        lblPassword2 = new Label(this, "确认密码验证提示");
        reg = new Button(this, "注册");
    }

    /**
     * 触发事件，处理按钮点击事件和相应的用户输入验证逻辑。
     *
     * @param eventName 事件名称
     * @param comp 触发事件的组件
     */
    @Override
    public void triggerEvent(String eventName, Component comp) {
        if ("click".equals(eventName) && comp instanceof Button) {
            int count = 0;
            // 验证用户名
            if (ValidatorUtil.isEmpty(username)) {
                username.update("红色");
                lblUsername.update("红色", "用户名不能为空");
            }
            else if (!ValidatorUtil.isLengthEnough(username, 8)) {
                username.update("红色");
                lblUsername.update("红色", "用户名长度不能少于8位");
            }
            else {
                username.update("黑色");
                lblUsername.update("绿色", "验证通过");
                count++;
            }

            // 验证密码
            if (ValidatorUtil.isEmpty(password1)) {
                password1.update("红色");
                lblPassword1.update("红色", "密码不能为空");
            }
            else if (!ValidatorUtil.isLengthRange(password1, 6, 15)) {
                password1.update("红色");
                lblPassword1.update("红色", "密码长度必须在6到15位之间");
            }
            else {
                password1.update("黑色");
                lblPassword1.update("绿色", "验证通过");
                count++;
            }

            // 验证确认密码
            if (!ValidatorUtil.isEqual(password1, password2)) {
                password2.update("红色");
                lblPassword2.update("红色", "两次密码输入不一致");
            }
            else {
                password2.update("黑色");
                lblPassword2.update("绿色", "验证通过");
                count++;
            }

            if (count == 3) {
                System.out.println("所有验证通过");
                // 执行后续的注册逻辑
            }
        }
    }

    /**
     * 刷新页面，输出当前组件状态。
     */
    public void refreshPage() {
        System.out.println(username);
        System.out.println(lblUsername);
        System.out.println(password1);
        System.out.println(lblPassword1);
        System.out.println(password2);
        System.out.println(lblPassword2);
        System.out.println();
    }

    /**
     * 测试触发事件的逻辑，模拟用户的行为。
     */
    public void testTrigger() {
        reg.triggerEvent("catch");

        reg.triggerEvent("click");
        refreshPage();

        username.setText("admin");
        reg.triggerEvent("click");
        refreshPage();

        username.setText("admin1234");
        reg.triggerEvent("click");
        refreshPage();

        password1.setText("123");
        reg.triggerEvent("click");
        refreshPage();

        password1.setText("12345678");
        password2.setText("12345679");
        reg.triggerEvent("click");
        refreshPage();

        password2.setText("12345678");
        reg.triggerEvent("click");
        refreshPage();
    }

    /**
     * 程序入口，创建页面并运行测试。
     *
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        Page page = new Page();
        page.testTrigger();
    }
}
